Conceptos de Arquitectura de Computadoras (resumido de William Stallings) (página 2)
Segmentación de cauce,
introducción del paralelismo en un programa secuencial
constituido por instrucciones de máquina
Múltiples procesadores, cubre
diferentes organizaciones y objetivos
Arquitectura de computador de
repertorio reducido de instrucciones
Elementos principales de los diseños
de un RISC son:
Gran número de registros de uso
general, tecnología de compiladores para optimizar el
uso de los registrosRepertorio de instrucciones limitado y
sencilloÉnfasis en la
optimización de la segmentación de
instrucciones
Características de la
ejecución de instrucciones y los partidarios
RISC:
Operaciones realizadas, funciones que
lleva a cabo el procesador y su interacción con la
memoria, algunas instrucciones HLL conducen a muchas
operaciones de código máquinaOperandos, mayor cantidad de variables
escalares locales que constantes enteras y
matrices/estructurasLlamadas a procedimientos, son las
operaciones que consumen más tiempo en programas HLL
compilados, el número de parámetros y variables
que manejan un procedimiento y la profundidad de anidamiento
son aspectos importantes; según el estudio de
Tanenbaum, el 98 por ciento de los procedimientos llamados
dinámicamente se les pasaba menos de seis argumentos y
el 92 por ciento de ellos usaban menos de seis variables
escalares locales
Al utilizar un amplio banco de
registros existieron dos aproximaciones:
Aproximación por
software, consiste en confiar al compilador la
maximización del uso de los registros el compilador
intentará asignar registros a las variables que se
usen más en un período de tiempo dado; requiere
el uso de sofisticados algoritmos de análisis de
programas.Aproximación por
hardware, consiste en usar más registros de
manera que puedan mantenerse en ellos más variables
durante períodos de tiempo más
largos.
Ventanas de registros
El uso de muchos registros debería
reducir la necesidad de acceder a memoria, el objetivo del
diseño es organizar los registros de tal modo que se
alcance esa meta. En un procedimiento típico, se emplean
pocos parámetros de llamada y variables locales, y la
profundidad de activación de procedimientos es
pequeña. Para aprovechar estas propiedades se usan
múltiples conjuntos pequeños de registros, cada uno
asignado a un procedimiento distinto. Una llamada a un
procedimiento hace que el procesador conmute
automáticamente a una venta de registros distinta de
tamaño fijo en lugar de salvaguardar los registro en
memoria. Las ventanas de procedimientos adyacentes están
parcialmente solapadas para permitir el paso de
parámetros. La ventana se divide en tres partes o
áreas de tamaño fijo:
1. Registros de parámetros
que contienen parámetros pasados al procedimiento
actual desde el que lo llamó y los resultados a
devolver al que lo llamó2. Registros locales que se usan
para variables locales3. Registros temporales que se
usan para intercambiar parámetros y resultados con el
siguiente nivel más bajo (el procedimiento llamado por
el procedimiento en curso)
Los registros temporales de un nivel son
físicamente los mismos que los registros de
parámetros del nivel más bajo adyacente. Este
solapamiento posibilita que los parámetros se pasen sin
que exista una transferencia de datos real. Se deduce que en un
banco de registros de N ventanas puede contener solo N-1
activaciones de procedimientos, para N no muy grande.
Variables globales
El compilador asigna posiciones de
memoria a las variables declaradas como globales en un HLL y
todas las instrucciones de máquina que referencien a
esas variables usen operandos referenciados en memoria. Esto
es ineficiente si se accede frecuentemente.Incorporar al procesador un conjunto de
registros globales, registros fijos en cuanto a su
número y accesibles por todos los procedimientos,
conlleva un hardware añadido que se encarga de adaptar
la división en el direccionamiento de los registros ya
que se consideran que desde el 0 al 7 indican registros
globales únicos y el resto pueden transformarse para
seleccionar los registros físicos de la ventana en
curso. El compilador debe decidir qué variables
globales deben ser asignadas a registros.
Amplio banco de registros frente a una
caché
El banco de registros organizado en
ventanas funciona como un buffer pequeño y rápido
que contiene un subconjunto de todas las variables que
probablemente se usen más, se comporta muy similar que una
memoria caché (aunque este banco es más
rápido)
Banco de registros amplio | Caché |
Todos los datos escalares | Datos escalares locales recientemente |
Variables individuales | Bloques de memoria |
Variables globales asignadas por el | Variables globales usadas |
Salvaguarda/restauración | Salvaguarda/restauración |
Direccionamiento a | Direccionamiento a memoria |
Incluso en el caso de que la caché
sea tan rápida como el banco de registros, el tiempo de
acceso será considerablemente mayor, porque para
referenciar una posición de memoria en la caché se
necesita un dirección de memoria completa y la complejidad
de estar operación depende del modo de direccionamiento.
En conclusión, el banco de registros basado en ventanas es
superior para datos escalares locales, no tanto para los
registros globales dado que la caché es capaz de manipular
tanto variables globales como locales. Un banco de registros
puede hacer un uso ineficiente del espacio ya que no todos los
procedimientos necesitarán todo el espacio de ventana
asignado a ellos, así mismo la caché tiene el
problema de que los datos se leen por bloques que tienen algo o
mucho que no se usará.
Optimización de registros basada
en el compilador P497
Cuando se dispone de un pequeño
número de registros (16-32), el uso optimizado de ellos es
responsabilidad del compilador. En HLL no se tiene referencias
explícitas a los registros. El objetivo del compilador es
mantener en registros en lugar de en memoria los operandos
necesarios para tantos cálculos como sea posible y
minimizar las operaciones de carga y almacenamiento. Cada
cantidad del programa candidata para residir en un registro se
asigna a un registro simbólico o virtual, el compilador
entonces asigna el número ilimitado de registros
simbólicos a un número fijo de registros reales.
Los registros virtuales cuya utilización no se solape
pueden compartir el mismo registro real. Si en una parte del
programa hay más cantidades a tratar que registros reales,
algunas de las cantidades se asignan a posiciones de memoria. Lo
esencial de la optimización es decidir qué
cantidades tienen que ser asignadas a registros en un determinado
punto del programa, la técnica más usada en RISC se
conoce como coloreado de grafos, la cual procede de la
topología.
¿Por qué
CISC?
Repertorios de instrucciones más
ricos, instrucciones más complejas, todo esto motivado por
el deseo de simplificar los compiladores y de mejorar las
prestaciones. Si existen instrucciones máquina que se
parezcan a sentencias del HLL la tarea del escritor de
compiladores se simplifica. Pero es difícil descubrir
casos que se ajusten perfectamente a la construcción. Otra
esperanza era que los CISC produzcan programas más
pequeños y más rápidos. Los programas
más pequeños ocupan menos memoria, pero como la
memoria es tan barata hoy, esto no es una gran ventaja. Tiene
mayor importancia el hecho de que programas más
pequeño mejoren las prestaciones: hay que captar menos
bytes de instrucciones y los programas más pequeños
ocupan menos páginas reduciendo los fallos de
página. Comparando con un RISC, el programa para CISC
puede ser más corto (tiene menos instrucciones) pero no
necesariamente debe ocupar menos bits de memoria. El otro factor
que motivaba a CISC era que le ejecución de instrucciones
fuera más rápida, pero debido a que la unidad de
control completa debe hacerse más compleja, y/o la memoria
de control del microprograma ha de hacerse más grande,
para acomodar un repertorio más rico, todo esto aumenta el
tiempo de ejecución de las instrucciones
sencillas.
Características del RISC
P501
Características comunes del
RISC:
Una instrucción por
ciclo, esto es una instrucción máquina
cada ciclo máquina; el ciclo máquina es el
tiempo que se tarda en captar dos operandos desde dos
registros, realizar una operación de la ALU y
almacenar el resultado en un registro. Como no hay que
acceder a la memoria de control de microprograma durante la
ejecución esto hace más rápida la
ejecución.Operaciones registro a
registro, menos LOAD y STORE para acceder a memoria, el
resto de operaciones son todas entre registros. Un repertorio
RISC puede incluir sólo una o dos instrucciones
ADDModos de direccionamiento
sencillos, casi todas las instrucciones RISC usan
direccionamiento sencillo a registro, aunque se pueden
incluir varios modos adicionales y otros modos más
complejos se pueden sintetizar por un software a partir de
los simplesFormato de instrucción
sencillos, generalmente se usa un formato o unos pocos,
la longitud de las instrucciones es fija y alineada en los
límites de una palabra.
Características CISC frente a
RISC P504
Un RISC clásico:
1. Un único tamaño
de instrucción2. Ese tamaño es
típicamente cuatro bytes3. Pocos modos de direccionamiento
de datos, típicamente menor que cinco.4. No se usa direccionamiento
indirecto5. No hay operaciones que combinen
carga/almacenamiento con cálculos
aritméticos6. No se direcciona más de
un operando de memoria por instrucción7. Las operaciones de
carga/almacenamiento no admiten una alineación de
datos arbitraria8. Un número máximo
de usos de la unidad de gestión de memoria de una
dirección de dato en cada
instrucción9. El número de bits de un
campo designador de registro entero es de cinco o más
bits.10. El número de bits de un
campo designador de registro de coma flotante es de cuatro o
más
Muchos diseños incluyen
características de RISC y CISC: PowerPC y Pentium
II
Clase 7
Memoria
P104
La memoria de un computador tiene una
organización jerárquica. En el nivel superior (el
más cercano al procesador) están los registros del
procesador, luego uno o más niveles de caché (L1,
L2, etc.), le sigue la memoria principal (construida de memoria
dinámicas de acceso aleatorio (DRAM). Todas estas son
memorias internas del computador. La jerarquía sigue con
la memoria externa, siendo el siguiente nivel un disco duro fijo
y uno o más niveles de soportes extraíbles como
discos ópticos, cintas, entre otros. A medida que
descendemos en la jerarquía de memoria disminuye el coste
por bit, aumenta la capacidad y crece el tiempo de acceso. La
estrategia es organizar los datos y los programas en memoria de
manera que las palabras de memoria necesarias estén
normalmente en la memoria más rápida.
Características de los sistemas
de memoria
Ubicación indica si la
memoria es interna o externa al computador.
Capacidad se expresa en
términos de bytes o de palabras para las memorias
internas.
Unidad de transferencia es igual
al número de líneas de entrada/salida de datos del
módulo de memoria, para memorias internas.
Palabra, es la unidad natural
de organización de la memoria. Su tamaño suele
coincidir con el número de bits utilizados para
representar números y con la longitud de las
instrucciones.Unidades direccionables, es la
palabra. Sin embargo muchos de los sistemas permiten
direccionar a nivel de bytes.Unidad de transferencia, para
la memoria principal es el número de bits que se leen
o escriben en memoria a la vez. No tiene por qué
coincidir con una palabra o con una unidad direccionable.
Para la memoria externa los datos se transfieren en bloques,
unidades más grandes que la palabra.
Método de acceso con las
siguientes variantes:
Acceso secuencial, la memoria
se organiza en unidades de datos llamadas registros, el
acceso deber realizarse con una secuencia lineal
específica. Utiliza mecanismo de lectura/escritura.
Tiempo de acceso variable.Acceso directo, los bloques
individuales o registros tienen una dirección
única basada en su dirección física.
Utiliza un mecanismo de lectura/escritura. Tiempo de acceso
variable.Acceso aleatorio, cada
posición direccionable de memoria tiene un
único mecanismo de acceso cableado físicamente.
El tiempo de acceso es constante e independiente de la
secuencia de accesos previos. La memoria principal y algunos
sistemas de caché son de acceso aleatorio.Asociativa, es del tipo de
acceso aleatorio que permite comparar ciertas posiciones de
bits dentro de una palabra en busca de hacer coincidir unos
valores dados y hacer esto para todas las palabras
simultáneamente. Por tanto, una palabra es recuperada
basándose en una porción de su contenido en
lugar de su dirección. Lo usan las memorias
caché.
Prestaciones y sus tres
parámetros de medida:
Tiempo de acceso (latencia),
es el tiempo que tarda en situar el mecanismo de
lectura/escritura en la posición deseada; en el acceso
aleatorio es el tiempo que transcurre desde el instante en
que se presenta un dirección a la memoria hasta que el
dato, está disponible para su uso, o ha sido
memorizado.Tiempo de ciclo de memoria, se
aplica a las de acceso aleatorio, consiste en el tiempo de
acceso y algún tiempo más que se requiere antes
de que pueda iniciarse un segundo acceso a memoria. Depende
de las características del bus del sistema y no del
procesador.Velocidad de transferencia, es
la velocidad a la que se pueden transferir datos a, o desde,
una unidad de memoria.
Soportes físicos para las
memorias como ser semiconductoras, memorias de superficie
magnética, memorias ópticas y
magneto-ópticas.
Características
físicas, en memorias volátiles la
información se va perdiendo o desaparece cuando se
desconecta la alimentación. En las no volátiles la
información, una vez grabada, permanece sin deteriorarse
hasta que se modifique intencionadamente, no se necesita fuente
de alimentación para retener la
información.
Organización es su
disposición o estructura física en bits para formar
palabras.
Jerarquía de
memoria
Memorias con muchas capacidad son
más baratas pero a su vez más lentas. Las
más rápidas son más caras y de menor
capacidad. La solución a este dilema es no contar con un
solo componente de memoria sino emplear una jerarquía de
memoria. Cuando se desciende en la jerarquía
ocurre:
a. Disminuye el coste por
bitb. Aumenta la capacidad
c. Aumenta el tiempo de
accesod. Disminuye la frecuencia de
acceso a la memoria por parte del procesador
La base para la condición d. es
conocido como localidad de las referencias que implica
lo siguiente: como el procesador trabaja principalmente con
agrupaciones fijas de referencias a memoria en periodos de tiempo
cortos, es posible organizar los datos a través de la
jerarquía de tal manera que el porcentaje de accesos a
cada nivel siguiente más bajo sea menor que al nivel
anterior; las agrupaciones actuales pueden ubicarse
temporalmente en el nivel 1, de vez en cuando una de las
agrupaciones del nivel 1 tendrá que ser devuelta al nivel
2 a fin de que deje sitio para que entre otra nueva
agrupación al nivel 1. Se puede aplicar a más de
dos niveles de memoria. Memoria caché
P111
Su objetivo es lograr que la velocidad de
la memoria sea lo más rápida posible, consiguiendo
al mismo tiempo un tamaño grande al precio de memorias
semiconductoras menos costosas. La caché contiene una
copia de partes de la memoria principal. Cuando el procesador
intenta leer una palabra de memoria, se hace una
comprobación para ver si la palabra está en la
caché; si es así, se entrega dicha palabra al
procesador, si no, un bloque de memoria principal (un cierto
número de palabras) se transfiere a la caché y
luego la palabra es entregada al procesador. La caché
consta de C líneas, cada línea contiene
K palabras, más una etiqueta de unos cuantos
bits. Tamaño de línea es el número de
palabras que hay en la línea.
Elementos de diseño de la
caché P114
Tamaño de caché:
cuanto más grande es la caché, mayor es el
número de puertas implicadas en direccionarla;
Cachés más grandes tienden a ser ligeramente
más lentas que las pequeñas. Imposible predecir un
tamaño óptimo.
Función de correspondencia:
Como hay menos líneas de caché que bloques de
memoria principal, se necesita un algoritmo que haga corresponder
bloques de memoria principal a líneas de caché.
Esto determina cómo se organiza la caché, se pueden
utilizar tres técnicas:
Correspondencia directa,
consiste en hacer corresponder cada bloque de memoria
principal a solo una línea posible de caché.
Usa una parte de la dirección del bloque de memoria
principal como número de línea en la
caché y esto proporciona una correspondencia o
asignación única de cada bloque de memoria
principal en la caché. Desventaja, hay una
posición concreta de caché para cada bloque
dado, por ello si un programa referencia repetidas veces a
palabra de dos bloques diferentes asignado en la misma
línea, dichos bloques se estarían
intercambiando continuamente en la caché,
provocaría una tasa de aciertos baja (vapuleo o
trashing).
Etiqueta | Índice, línea de | Palabras |
Correspondencia asociativa,
permite que cada bloque de memoria principal pueda cargarse
en cualquier línea de la caché. Hay
flexibilidad para que cualquier bloque sea reemplazado cuando
se va a escribir uno nueva en la caché. Desventaja,
requiere una compleja circuitería para examinar en
paralelo las etiquetas de todas las líneas de
caché.
Etiqueta | Palabras |
Correspondencia asociativa por
conjuntos, la caché se divide en v
conjuntos, cada uno de k líneas. La
lógica de control de la caché interpreta un
dirección de memoria como tres campos: etiqueta,
conjunto y palabra. La etiqueta de una dirección de
memoria es mucho más corta y se compara solo con las
k etiquetas dentro de un mismo conjunto.
Etiqueta | Conjunto | Palabra |
Algoritmos de sustitución:
una vez llena la caché, para introducir un nuevo bloque
debe sustituirse uno de los boques existentes. Para el caso de
correspondencia directa, solo hay una posible línea para
cada bloque particular y no hay elección posible. Para las
técnicas asociativas se requieren algoritmos de
sustitución. Tales algoritmos se implementan en hardware,
para así conseguir alta velocidad.
1. "Utilizado menos
recientemente", LRU (least-recently used): probalbmente
el más efectivo, se sustituye el bloque que se ha
mantenido en la caché por más tiempo sin haber
sido referenciado. Cuando una línea es refernciada se
pone a 1 su bit de USO y a 0 el de la otra línea del
mismo conjunto (para la asociativa por conjunto de dos
vías). Cuando va a transferirse un bloque al conjunto
se utiliza la línea cuyo bit de USO es 0.2. "Primero en entrar-primero
en salir", FIFO: se sustituye aquel bloque que ha estado
más tiempo en la caché. Se puede implementar
mediante un técnica cíclica o buffer
circular.3. "Utilizado menos
frecuentemente", LFU (least-frequently used): se
sustituye aquel bloque del conjunto que ha experimentado
menos referencias. Se puede implementar asociando un contador
a cada línea.4. Aleatoria: no se basa
en el grado de utilización, simplemente selecciona una
línea al azar entre las posibles candidatas. Presenta
prestaciones ligeramente inferiores a un algoritmo basado en
la utlización.
Política de
escritura:
En acierto, cuando el dato es
existente:
1. Escritura inmediata:
todas las operaciones de escritura se hacen tanto en
caché como en memoria principal, asegurando que el
contenido de la memoria principal siempre sea válido.
Desventaja, genera un tráfico sustancial con la
memoria que puede originar un cuello de botella.2. Post-escritura:
minimiza las escrituras en memoria. Las actualizaciones se
hacen solo en la caché. Se activa un bit ACTUALIZAR
asociado a la línea cuando se tiene una
actualización. Luego, cuando el bloque es sustituido,
es escrito en memoria principal si y solo si el bit
ACTUALIZAR está activo. Problema, se tienen porciones
de memoria principal que no son válidas, y los accesos
por parte de los módulos de E/S tendrán que
hacerse solo a través de la caché; esto
complica la circuitería y genera un cuello de botella
potencial.
En fallo, cuando el dato se
crea:
1. Write-allocate, la
información se lleva de la memoria principal a la
caché. Se sobrescribe en la caché2. No write-allocate, El
bloque no se lleva a la memoria caché. Se escribe
directamente en la memoria principal
Clase 8
Buses del sistema
P75
Un computador está constituido por
un conjunto de unidades o módulos de tres tipos
elementales que se comunican entre sí (procesador,
memoria, E/S). La estructura de interconexión es el
conjunto de líneas que conectan los diversos
módulos.
Memoria, generalmente
constituidos por N palabras de la misma longitud.
Una palabra puede leerse de, o escribirse en la memoria. Se
indican mediante señales de control, leer y
escribir.Módulo de E/S, puede
controlar un dispositivo externo, operaciones de lectura y
escritura. Puede enviar señales de interrupción
al procesador.Procesador, lee instrucciones
y datos, escribe datos una vez los ha procesado, utiliza
ciertas señales para controlar el funcionamiento del
sistema. Puede recibir señales de
interrupción
Tipos de transferencia
necesarias:
Memoria a procesador, el procesador lee
una instrucción o un dato desde la memoriaProcesador a memoria, el procesador
escribe un dato en la memoriaE/S a procesador, el procesador lee
datos de un dispositivo de E/S a través de un
módulo de E/SProcesador a E/S, el procesador
envía datos al dispositivo de E/SMemoria a E/S y viceversa, un
módulo de E/S puede intercambiar datos directamente
con la memoria, sin pasar por el procesador utilizando el
acceso directo a memoria (DMA)
Interconexión con buses
P77
Un bus es un camino de comunicación
entre dos o más dispositivos. Al bus se conectan varios
dispositivos y cualquier señal transmitida por uno de esos
dispositivos está disponible para que los otros
dispositivos conectados al bus puedan acceder a ella. Solo un
dispositivo puede transmitir con éxito en un momento dado,
sino podrían las señales solaparse y
distorsionarse. Un bus está constituido por varios caminos
de comunicación o líneas. Cada línea es
capaz de transmitir señales binarias representadas por 1 y
por 0. Se puede transmitir una secuencia de dígitos
binario a través de una única línea. Se
pueden utilizar varias líneas del bus para transmitir
dígitos binarios simultáneamente (en paralelo, un
dato de 8 bits con ocho líneas del bus). Los computadores
poseen diferentes tipos de buses. El bus que conecta los
componentes principales del computador se denomina bus del
sistema.
Estructura del bus
Constituido usualmente por entre cincuenta
y cien líneas. A cada línea se le asigna un
significado o una función particular. Se clasifican tres
grupos funcionales de líneas: líneas de datos, de
direcciones y de control. Pueden existir líneas de
alimentación para suministrar energía a lo
módulos conectados al bus.
Líneas de datos,
proporcionan un camino para transmitir datos entre los
módulos del sistema. El conjunto de estas líneas se
le llama bus de datos. La anchura del bus de
datos es la cantidad de líneas que incluye (32 o cientos
de líneas). El número de líneas determina
cuántos bits se pueden transferir al mismo
tiempo.
Líneas de dirección,
se utilizan para designar la fuente o el destino del dato situado
en el bus de datos.
Líneas de control, se
utilizan para controlar el acceso y el uso de las líneas
de datos y de direcciones. Las señales de control
transmiten tanto ordenes como información de
temporización entre los módulos del sistema. Estas
señales indican la validez de los datos y las direcciones.
Por ejemplo, señal de escritura/lectura en memoria,
petición de interrupción, señales de
reloj.
Jerarquía de buses
múltiples P80
Si se conectan muchos dispositivos al bus
las prestaciones pueden disminuir, por dos causas
principales:
A más dispositivos conectados al
bus, mayor es el retardo de propagación. Este retardo
determina el tiempo que necesitan los dispositivos para
coordinarse en el uso del busEl bus puede convertirse en un cuello
de botella a medida que las peticiones de transferencia
acumuladas se aproximan a la capacidad del bus. Se puede
resolver usando buses más anchos e incrementando la
velocidad a la que el bus transfiere los datos
La mayoría de los computadores
utilizan varios buses, organizados jerárquicamente. Un bus
local conecta el procesador a una memoria caché y se
pueden conectar también uno o más dispositivos
locales. El controlador de memoria caché conecta la
caché no solo al bus local sino también al bus de
sistema. Se usan buses de expansión para conectar
controladores de E/S al bus de sistema. La interfaz del bus de
expansión regula las transferencias de datos entre el bus
de sistema y los controladores conectados al bus de
expansión. Esto permite conectar al sistema una amplia
variedad de dispositivos de E/S y al mismo tiempo aislar el
trafico de información entre la memoria y el procesador
del tráfico correspondiente a las E/S.
Elementos de diseño de un bus
P82
Tipos de buses: se dividen en
dedicadas y multiplexadas. Una línea de bus dedicada
está permanente asignada a una función o a un
subconjunto físico de componente del computador. El
multiplexado en el tiempo es un método que usa las mismas
líneas para distintos usos. Ventaja del multiplexado es
que usa menos líneas, cosa que ahorra espacio y costes; la
desventaja es que se necesita una circuitería más
compleja en cada módulo, puede producirse una
reducción de las prestaciones por que cuando deben
compartir las mismas líneas no pueden producirse en
paralelo. La dedicación física se refiere al uso de
múltiples buses, cada uno de los cuales conecta solo un
subconjunto de módulos; una ventaja es su elevado
rendimiento por haber menos conflictos por el acceso al bus, y
una desventaja es el incremento en el tamaño y el costo
del sistema.
Método de arbitraje, se da
porque más de un módulo puede necesitar el control
del bus y solo una unidad puede transmitir a través del
bus en un instante dado. Se clasifican en centralizados o
distribuidos.
Centralizado, un único
dispositivo hardware (controlador del bus o árbitro)
es responsable de asignar tiempos en el bus. El dispositivo
puede estar en un módulo separado o ser parte del
procesador.Distribuido, no existe un
controlador central, en su lugar, cada módulo dispone
de lógica para controlar el acceso y los
módulos actúan conjuntamente para compartir el
bus
En ambos métodos de arbitraje el
propósito es designar un dispositivo, el procesador o un
módulo de E/S como maestro del bus.
Temporización, hace
referencia a la forma en la que se coordinan los eventos en el
bus. Pueden ser síncrona o asíncrona.
Síncrona, la presencia
de un evento en el bus está determinada por un reloj.
El bus incluye una línea de reloj a través de
la que se transmite una secuencia en la que se alternan
intervalos regulares de igual duración a uno y a cero.
Un único intervalo a uno seguido de otro a cero se
conoce como ciclo de reloj o ciclo de bus.
Todos los dispositivos del bus pueden leer la línea de
reloj y todos los eventos empiezan al principio del ciclo de
reloj. Es más fácil de implementar y comprobar,
pero es menos flexible que la asíncrona.Asíncrona, la presencia
de un evento en el bus es consecuencia y depende de que se
produzca un evento previo. Pueden compartir el bus una mezcla
de dispositivos lentos y rápidos, utilizando tanto las
tecnologías mas antiguas como las más
recientes, que en la síncrona no se puede ya que todos
los dispositivos debe utilizar la misma frecuencia de
reloj.
Anchura del bus, afecta a las
prestaciones del sistema: cuanto más ancho es el bus de
datos, mayor es el número de bits que se transmiten a la
vez. La anchura del bus de direcciones afecta a la capacidad del
sistema: cuanto más ancho es el bus de direcciones, mayor
es el rango de posiciones a las que se puede hacer
referencia.
Tipo de transferencia de datos,
todos los buses permiten tanto transferencias de escritura (dato
de maestro a esclavo) como de lectura (dato de esclavo a
maestro). En el caso de un bus con direcciones y datos
multiplexados, el bus se utiliza primero para especificar la
dirección y luego para transferir el dato. En una
operación de lectura, hay un tiempo de espera mientras el
dato se está captando del dispositivo esclavo para
situarlo en el bus. Tanto para lectura como escritura, puede
haber también un retardo si se usa algún
procedimiento de arbitraje para acceder al control del bus en el
resto de la operación. Algunos buses también
permiten transferencias de bloques de datos.
PCI P87
El bus PCI (Interconexión de
Componente Periférico) es un bus muy popular de ancho de
banda elevado, independiente del procesador, que se puede
utilizar como un bus de periféricos. El PCI proporciona
mejores prestaciones para los subsistemas de E/S de alta
velocidad. El PCI ha sido diseñado específicamente
para ajustarse, económicamente a los requisitos de E/S de
los sistemas actuales. Se implementa con muy pocos circuitos
integrados y permite que otros buses se conecten al bus PCI.
Utiliza temporización síncrona y un esquema de
arbitraje centralizado. Puede configurarse como un bus de 32 o 64
bits. Tiene 49 líneas de señal obligatorias, las
cuales se dividen en grupos funcionales:
Terminales de sistema, conformadas por
los terminales de reloj y de inicio.Terminales de direcciones y datos,
incluye 32 líneas para datos y direcciones
multiplexadas en el tiempo. Las otras líneas se usan
para interpretar y validar las líneas de señal
correspondientes a los datos y las direccionesTerminales de control de interfaz,
controlan la temporización de las transferencias y
proporcionan coordinación entre los que inician y los
destinatarios.Terminales de arbitraje, no son
líneas compartidas, cada maestro del PCI tiene su par
propio de líneas que lo conectan directamente al
arbitro del bus PCITerminales para señales de
error, usadas para indicar errores de paridad u
otros
Además de 51 señales
opcionales:
Terminales de
interrupciónTerminales de soporte de
cachéTerminales de ampliación a bus
de 64 bitsTerminales de test
Ordenes, transferencia de datos y
arbitraje del PCI
La actividad del bus consiste en
transferencias entre elementos conectados al bus. Maestro es el
que inicia la transferencia.
La transferencia de datos en el bus PCI es
una transacción única que consta de una fase de
direccionamiento y una o más fases de datos.
Utiliza un arbitraje centralizado
síncrono en el que cada maestro tiene una única
señal de petición y cesión del bus, estas se
conectan a un árbitro central. El arbitraje se produce al
mismo tiempo que el maestro del bus actual está realizando
una transferencia de datos, por tanto no se pierden ciclos de bus
en realizar el arbitraje; esto es conocido como arbitraje
oculto o solapado.
Clase 9
Procesadores
superescalares P528
Un procesador superescalar es aquél
que usa múltiples cauces de instrucciones independientes.
Varios flujos de instrucciones se procesan
simultáneamente.
La supersegmentación aprovecha el
hecho de que muchas etapas del cauce realizan tareas que
requieren menos de medio ciclo de reloj.
La aproximación superescalar depende
de la habilidad para ejecutar múltiples instrucciones en
paralelo. El paralelismo en las instrucciones se refiere al grado
en el que, en promedio, las instrucciones de un programa se
pueden ejecutar en paralelo. Para maximizar el paralelismo se
usan técnicas de hardware u optimizaciones por el
compilador. Presenta cinco limitaciones:
Dependencia de datos verdadera, cuando
una instrucción necesita un dato que aún no
terminó de usar/resolver la anterior
instrucciónDependencia relativa al procedimiento,
presencia de saltos, uso de instrucciones de longitud
variableConflicto en los recursos, es una pugna
de dos o más instrucciones por el mismo recurso al
mismo tiempoDependencia de salida
Antidependencia
Paralelismo en las instrucciones y
paralelismo de la máquina
Paralelismo en las instrucciones cuando las
instrucciones de una secuencia son independientes y por tanto
pueden ejecutarse en paralelo solapándose. Depende de la
frecuencia de dependencias de datos verdaderas y dependencias
relativas al procedimiento que haya en el código. El
paralelismo de la máquina es una medida de la capacidad
del procesador para sacar partido al paralelismo en las
instrucciones. Depende del número de instrucciones que
pueden captarse y ejecutarse al mismo tiempo (número de
cauces paralelos) y de la velocidad y sofisticación de los
mecanismo que usa el procesador para localizar instrucciones
independientes. El empleo de instrucciones con longitud fija,
como en un RISC, aumenta el paralelismo en las
instrucciones.
Políticas de emisión de
instrucciones
El procesador tiene que ser capaz de
identificar el paralelismo en las instrucciones y organizar la
captación, decodificación y ejecución de las
instrucciones en paralelo. El procesador intenta localizar
instrucciones más allá del punto de
ejecución en curso, que puedan introducirse en el cauce y
ejecutarse, hay tres ordenaciones importantes:
El orden en que se captan las
instruccionesEl orden en que se ejecutan las
instruccionesEl orden en que las instrucciones
actualizan los contenidos de los registros y de las
posiciones de memoria
La única restricción del
procesador, con respecto a la alteración de estos ordenes,
es que el resultado debe ser correcto. Categorías de las
políticas de emisión de instrucciones en los
procesadores superescalares:
Emisión en orden y
finalización en orden, emite instrucciones en el
orden exacto en que lo haría una ejecución
secuencial y escribe los resultados en ese mismo
orden.Emisión en orden y
finalización desordenada, se usa en los
procesadores RISC escalares para mejorar la velocidad de las
instrucciones que necesitan ciclos. Con la
finalización desordenada puede haber cualquier
número de instrucciones e la etapa de ejecución
en un momento dado, hasta alcanzar el máximo grado de
paralelismo de la máquina. La finalización
desordenada necesita una lógica de emisión de
instrucciones más compleja que la finalización
en orden. Además es más difícil ocuparse
de las interrupciones y excepciones. El procesador debe
asegurarse que la reanudación tiene en cuenta que, en
el omento de la interrupción, algunas instrucciones
posteriores a la instrucción que provocó dicha
interrupción pueden haber finalizado ya.Emisión desordenada y
finalización desordenada: con la emisión
en orden, el procesador solo decodificará
instrucciones hasta el punto de dependencia o conflicto. Un
buffer llamado ventana de instrucciones desacopla las etapas
del cauce de decodificación y ejecución,
entonces cuando un procesador termina de decodificar un
instrucción, la coloca en la ventana de instrucciones.
Ventajas, el procesador tiene capacidad de
anticipación, las instrucciones se emiten desde la
ventana de instrucciones sin tener en cuenta su orden en el
programa. El programa debe funcionar correctamente,
única restricción. Antidependencia, la segunda
instrucción destruye un valor que usa la primera
instrucción.
Renombramiento de
registros
Las dependencias de salida y las
antidependencias, por su parte, surgen porque los valores de los
registros no pueden reflejar ya la secuencia de valores dictada
por el flujo del programa; con el renombramiento de registros, el
hardware del procesador asigna dinámicamente los
registros, que están asociados con los valores que
necesitan las instrucciones en diversos instantes de tiempo.
Cuando la ejecución de una instrucción guarda un
resultado en registro, se almacena en un registro nuevo, se
asignan dinámicamente.
Predicción de saltos,
ejecución e implementación
superescalar
Con la llegada de RISC se exploró la
estrategia de salto retardado, la cual mantiene lleno el cauce
mientras el procesador capta un nueva secuencia de instrucciones.
Ocasiona problemas con la dependencias entre instrucciones, en el
ciclo de retardo. Los superescalares volvieron a las
técnicas de predicción de saltos anteriores a las
de los RISC, como la predicción de saltos estática,
o una predicción dinámica de saltos basada en el
análisis de la historia de los saltos.
El programa a ejecutar es una secuencia
lineal de instrucciones. El proceso de captación de
instrucciones, que incluye la predicción de saltos, se usa
para formar un flujo dinámico de instrucciones. Se
examinan las dependencias de este flujo, u el procesador puede
eliminar las que sean artificiales. El procesador envía
entonces las instrucciones a una ventana de ejecución. En
esta ventana, las instrucciones ya no forman un flujo secuencial
sino que están estructuradas de acuerdo a sus dependencias
de datos verdaderas. El procesador lleva a cabo la etapa de
ejecución de cada instrucción en un orden
determinado por las dependencias de datos verdaderas y la
disponibilidad de los recursos hardware. Por último las
instrucciones se vuelven a poner conceptualmente en un orden
secuencial y sus resultados se almacenan.
Elementos principales de un procesador
superescalar:
Estrategias de captación de
instrucciones que capten múltiples instrucciones al
mismo tiempo, prediciendo los resultados de los saltos
condicionales y captando más allá de
ellas.Lógica para determinar
dependencias verdaderas entre valores de registros y
mecanismo para comunicar esos valores a donde sean necesarios
durante la ejecuciónMecanismos para iniciar o emitir
múltiples instrucciones en paraleloRecursos para le ejecución en
paralelo de múltiples instrucciones, que incluyan
múltiples unidades funcionales segmentadas y
jerarquías de memoria capaces de atender
múltiples referencias a memoriaMecanismos para entregar el estado del
procesador en el orden correcto
Clase 10
Procesamiento
paralelo P669
El uso de varios procesadores que puedan
ejecutar en paralelo una carga de trabajo data incrementa las
prestaciones de un sistema. Multiprocesadores simétricos y
los clusters, más comunes; sistemas de acceso no uniforme
a memoria, nuevo. Un SMP es un computador constituido
por varios procesadores similares interconectados mediante un bus
o algún tipo de estructura de conmutación. Cuando
en un único chip se implementan varios procesadores, se
habla de multiprocesador monochip. Los procesadores
multihebra consisten en repetir algunos componentes de
un procesador para que este pueda ejecutar varias hebras
concurrentemente. Un cluster es un grupo de computadoras
completos interconectados y trabajando juntos como un solo
recurso de cómputo. Computador completo significa que
puede funcionar autónomamente, fuera del cluster. Un
sistema NUMA es un multiprocesador de memoria compartida
en el que el tiempo de acceso de un procesador a una palabra de
memoria varía con la ubicación de la palabra en
memoria. Los procesadores vectoriales son procesadores
paralelos de propósito especifico, diseñados para
procesar eficientemente vectores o matrices de datos.
Tipos de sistemas
paralelos
Una secuencia de instrucciones y
una secuencia de datos (SISD): un único
procesador interpreta una única secuencia de
instrucciones para operar con los datos almacenados en una
única memoria. Los monoprocesadores.Una secuencia de instrucciones y
múltiples secuencias de datos (SIMD): una
única instrucción máquina controla paso
a paso la ejecución simultánea y sincronizada
de un cierto número de elementos de proceso. Cada
elemento de proceso tiene una memoria asociada, de forma que
cada instrucción es ejecutada por cada procesador con
un conjunto de datos diferentes. Los procesadores vectoriales
y los matriciales.Múltiples secuencias de
instrucciones y una secuencia de datos (MISD): se
transmite una secuencia de datos a un conjunto de
procesadores, cada uno de los cuales ejecuta una secuencia de
instrucciones diferente. Nunca ha sido
implementada.Múltiples secuencias de
instrucciones y múltiples secuencias de datos
(MIMD): un conjunto de procesadores ejecuta
simultáneamente secuencias de instrucciones diferentes
con conjuntos de datos diferentes. Los SMP, clusters y los
sistemas NUMA.
Multiprocesadores simétricos
P672
1. Hay dos o más
procesadores similares de capacidades comparables.2. Estos procesadores comparten la
memoria principal y las E/S y están interconectados
mediante un bus u otro tipo de sistema de
interconexión (tiempo de acceso a memoria
aproximadamente el mismo para todos los
procesadores)3. Todos los procesadores
comparten los dispositivos de E/S, bien a través de
los mismos canales o mediante canales distintos que
proporcionan caminos de acceso al mismo
dispositivo.4. Todos los procesadores pueden
desempeñar las mismas funciones.5. El sistema está
controlado por un sistema operativo integrado que proporciona
la interacción entre los procesadores y sus programas
a los niveles de trabajo, tarea, fichero y datos.
Ventajas de un SMP frente a un
monoprocesador:
Prestaciones: si el trabajo
puede organizarse para ejecutarse en paralelo, entonces un
sistema con varios procesadores mejorará las
prestaciones que con uno solo del mismo tipo.Disponibilidad: debido a que
todos los procesadores pueden realizar las mismas funciones,
un fallo en un procesador no hará que el computador se
detenga.Crecimiento incremental: se
aumentan las prestaciones añadiendo más
procesadoresEscalado: los fabricantes
pueden ofrecer una gama variada de productos con precios y
prestaciones diferentes en función del número
de procesadores que configuran el sistema.
Bus de tiempo compartido
Es el mecanismo más simple para
construir un sistema multiprocesador.
Direccionamiento: debe ser
posible distinguir los módulos del bus par determinar
la fuente y el destino de los datosArbitraje: cualquier
módulo de E/S puede funcionar temporalmente como un
maestro. Utiliza algún tipo de esquema de
prioridad.Tiempo compartido: cuando un
módulo está controlando el bus, los otros
módulos no tienen acceso al mismo y deben, si es
necesario, suspender su operación hasta que dispongan
del bus.
La organización del bus:
Simplicidad: la interfaz
física y la lógica de cada procesador para el
direccionamiento, el arbitraje y para compartir el tiempo del
bus es el mismo que el de un sistema con un solo
procesadorFlexibilidad: es sencillo
expandir el sistema conectando más procesadores al
busFiabilidad: el bus es un medio
pasivo, y el fallo de cualquiera de los dispositivos
conectados no provocaría el fallo de todo el
sistema.
Principal desventaja, las prestaciones.
Todas las referencias a memoria pasan por el bus. La velocidad
del sistema está limitada por el tiempo de ciclo. Para
mejorar las prestaciones, es deseable equipar a cada procesador
de una memoria caché. Surge el problema de coherencia de
caché, resuelto por el hardware.
Coherencia de
caché
Las soluciones software de coherencia de
caché intentan evitar la necesidad de circuitería y
lógica hardware adicional dejando que el compilador y el
sistema operativo se encarguen del problema. Los mecanismo de
coherencias basados en el compilador realizan un análisis
del código y marcan los datos que pueden dar problemas al
pasar a caché; después el sistema operativo o el
hardware impiden que se pasen a caché los datos marcados
como no almacenables en caché. El enfoque más
sencillo es impedir que cualquier dato compartido se pase a
caché.
Las soluciones hardware se denominan
protocolos de coherencia de caché. Permiten reconocer en
tiempo de ejecución las situaciones de inconsistencias
potenciales. El problema se considera solo en el momento que
aparece. Uso más efectivo de las cachés. Mejora las
prestaciones en relaciones a las aproximaciones software. Reduce
la complejidad en el desarrollo del software.
Protocolos de directorio:
Recogen y mantienen la información acerca de
dónde residen las copias de las líneas. Tiene
un controlador centralizado que es parte del controlador de
memoria principal, y un directorio que se almacena en la
memoria principal, el cual contiene información de
estado global en relación con los contenido de las
diferentes cachés locales. Presentan un cuello de
botella central y el coste de comunicación entre los
controladores de las distintas cachés y el controlador
central es otra desventaja. Son efectivos en sistemas de gran
escala con múltiples buses.Protocolos de sondeo:
Distribuyen la responsabilidad de mantener la coherencia de
caché entre todos los controladores de caché
del multiprocesador. Una caché debe reconocer cuando
un alinea de las que contiene está compartida con
otras cachés. Cuando se actualiza una línea de
caché compartida, debe anunciare a todas las otras
cachés mediante un mecanismo de difusión. Cada
controlador de caché es capaz de sondear o espiar la
red para observar las notificaciones que se difunden, y
reaccionar adecuadamente. Se usa la aproximación de
invalidar-si-escritura en multiprocesadores comerciales, se
marca el estado de cada línea de caché:
modificado, exclusivo, compartido o no-válido (se usan
dos bits adicionales).
Procesamiento multihebra y
multiprocesadores monochip
Con el procesamiento multihebra, la
secuencia de instrucciones se divide en secuencias más
pequeñas, denominadas hebras, que pueden ejecutarse en
paralelo. Un proceso es un programa en ejecución
en un computador:
Propiedad de recursos: dispone
de un espacio de direcciones virtuales para almacenar la
imagen del proceso, que consta del programa, los datos, la
pila, entre otros. En ocasiones, pueden poseer recursos como
la memoria principal, canales de E/S, dispositivos de E/S y
ficheros.Planificación/ejecución: sigue
un camino de ejecución a través de uno o
más programas. Esta ejecución puede
entremezclarse con la de otros procesos
Conmutación de proceso, es
la operación que cambia el proceso que se está
ejecutando en el procesador por otro proceso. Almacena todos los
datos del primero y los reemplaza con la información del
segundo.
Hebra, es una unidad de trabajo
dentro de un proceso que se puede asignar al procesador. Se
ejecuta secuencialmente y puede interrumpirse para que el
procesador pase a ejecutar otra hebra.
Conmutación de hebra: el
control del procesador pasa de una hebra a otra dentro de un
mismo proceso. Es menos costosa que la conmutación de
procesos.
El procesamiento multihebra
explícito ejecutan concurrentemente instrucciones de
hebras explícitas diferentes, entremezclando instrucciones
de hebras diferentes en cauces compartidos o mediante
ejecución paralela y cauces paralelos. Y el procesamiento
multihebra implícito hace referencia a la ejecución
concurrente de varias hebras extraídas de un único
programa secuencial. Estas pueden ser definidas
estáticamente por el compilador o dinámicamente por
el hardware.
Un procesador multihebra debe proporcionar
un contador de programa distinto para cada una de las hebras que
puedan ejecutarse concurrentemente. Se trata cada hebra
separadamente y usa técnicas superescalares para optimizar
la ejecución de una hebra.
Clusters P694
Un cluster es un grupo de computadores
completos interconectados que trabajan conjuntamente como un
único recurso de cómputo, creándose la
ilusión de que se trata de una sola máquina.
Computador completo hace referencia a un sistema que puede
funcionar por sí solo, independientemente del cluster.
Beneficios:
Escalabilidad absoluta: un
cluster puede tener decenas de máquinas, cada una de
las cuales puede ser un multiprocesador. Es posible
configurar clusters grandes que incluso superan las
prestaciones de los computadores independientes más
potentes.Escalabilidad incremental: un
cluster se configura de forma que sea posible añadir
nuevos sistemas al cluster en ampliaciones
sucesivas.Alta disponibilidad: puesto
que cada nodo del cluster es un computador autónomo,
el fallo de uno, no significa la pérdida del
servicio.Mejor relación
precio-prestaciones: es posible configurar un cluster
con mayor o igual potencia de cómputo que un
computador independiente a mucho menos costo.
Clusters frente a sistemas SMP
P700
Ambos constituyen configuraciones con
varios procesadores que pueden ejecutar aplicaciones con una alta
demanda de recursos.
Ventajas de un SMP:
Más fácil de gestionar y
configurar que un clusterEstá mucho más cerca del
modelo de computador de un solo procesador para el que
están disponibles casi todas las
aplicacionesNecesita menos espacio
físicoConsume menos energía que un
cluster comparableSon plataformas estables y bien
establecidas
Ventajas de los Clusters:
Superiores a los SMP en términos
de escalabilidad absoluta e incrementalSuperiores en términos de
disponibilidad, todos los componentes del sistema pueden
hacerse altamente redundantes
Acceso no uniforme a
memoria
Acceso uniforma a memoria (UMA):
todos los procesadores pueden acceder a toda la memoria principal
utilizando instrucciones de carga y almacenamiento. El tiempo de
acceso es el mismo para cualquier región de la memoria. El
tiempo de acceso a memoria por parte de todos los procesadores es
el mismo. SMP es UMA.
Acceso no uniforme a memoria
(NUMA): todos los procesadores tienen acceso a todas las
partes de memoria principal utilizando instrucciones de carga y
almacenamiento. El tiempo de acceso a memoria depende de la
región a la que se acceda. Para procesadores distintos,
las regiones de memoria que son más lentas o más
rápidas son diferentes.
NUMA con coherencia de caché
(CC-NUMA): un computador NUMA en el que la coherencia de
caché se mantiene en todas las cachés de los
distintos procesadores.
Motivación
En un SMP existe un límite
práctico en el número de procesadores que pueden
utilizarse. Un esquema de caché reduce el tráfico
en el bus. A medida que aumentan los procesadores, el
tráfico en el bus también aumenta. A partir de
cierto momento, el bus pasa a ser el cuello de botella para las
prestaciones. En un cluster cada nodo tiene su propia memoria
principal privada y las aplicaciones no ven la memoria global.
NUMA retiene las características SMP y brinda
multiprocesamiento a gran escala. El objetivo de un computador
NUMA es mantener una memoria transparente desde cualquier parte
del sistema, al tiempo que se permiten varios nodos del
multiprocesador, cada uno con su propio bus u otro sistema de
interconexión interna.
Organización
CC-NUMA
Hay varios nodos independientes, cada uno
de los cuales es un SMP. Así cada nodo contiene varios
procesadores, cada uno con sus cachés L1 y L2, más
memoria principal. Los nodos se interconectan a través de
un medio de comunicación que podría ser
algún mecanismo de conmutación, un anillo o
algún tipo de red. Orden de acceso a memoria, cache L1 y
caché L2 son locales al procesador; memoria principal es
local al nodo. Toda la actividad de accesos a memoria es
automática y transparente al procesador y su
caché.
Organización y arquitectura de
computadoras – William Stallings – 7ma.
Edición
P234 = Página 234
Autor:
Juan Ramallo
Página anterior | Volver al principio del trabajo | Página siguiente |